using System;
using System.Collections;
using System.Collections.Generic;
using Me.Prettyprint.Hector.Api.Beans;

namespace Me.Prettyprint.Hector.Api.Query
{
    /// <summary>
    /// A query for the call get_range_slices. In order to use comparison 
    /// expressions (i.e addEqualsExpression) your CF must be configured 
    /// to use secondary indexes.
    /// </summary>
    /// <typeparam name="K"></typeparam>
    /// <typeparam name="N"></typeparam>
    /// <typeparam name="V"></typeparam>
	public interface RangeSlicesQuery<K, N, V> : Query<OrderedRows<K, N, V >>
	{
        RangeSlicesQuery<K, N, V> SetKeys(K start, K end);
        RangeSlicesQuery<K, N, V> SetTokens(K startKey, string startToken, string endToken);
        RangeSlicesQuery<K, N, V> SetRowCount(int rowCount);
        RangeSlicesQuery<K, N, V> SetColumnNames(List<N> columnNames);
        List<N> ColumnNames
        {
            get;
        }
        int RowCount
        {
            get;
        }
        RangeSlicesQuery<K, N, V> SetColumnFamily(string cf);
        RangeSlicesQuery<K, N, V> SetRange(N start, N finish, bool reversed, int count);
        RangeSlicesQuery<K, N, V> SetReturnKeysOnly();
        RangeSlicesQuery<K, N, V> AddEqualsExpression(N columnName, V columnValue);
        RangeSlicesQuery<K, N, V> AddLteExpression(N columnName, V columnValue);
        RangeSlicesQuery<K, N, V> AddGteExpression(N columnName, V columnValue);
        RangeSlicesQuery<K, N, V> AddLtExpression(N columnName, V columnValue);
        RangeSlicesQuery<K, N, V> AddGtExpression(N columnName, V columnValue);
	}
}